package com.jusfoun.communication.dao;

import com.jusfoun.communication.model.Message;
import com.jusfoun.communication.util.PageInfo;

import java.util.List;

/**
 * @author player six
 * @email jslcylcy@163.com
 * @create 2017-12-12 15:46
 **/
public interface MessageDao {

    /**
     * 新增message,同时新增message用户关系
     *
     * @param message
     * @return
     */
    Message add(Message message);

    /**
     * 根据id获取message 列表
     *
     * @param id
     * @return
     */
    Message getById(Long id);

    /**
     * 更新message
     *
     * @param message
     * @return
     */
    Message update(Message message);

    /**
     * 推送消息去发送
     *
     * @param message
     * @return
     */
    Message push4Send(Message message);

    /**
     * 添加普通消息用户关系
     *
     * @param message
     * @return
     */
    void addUserMessageCommon(Message message);

    /**
     * 添加系统消息用户关系
     *
     * @param message
     * @return
     */
    void addUserMessageSystem(Message message);

    /**
     * 获取用户离线消息列表
     *
     * @return
     */
    List<Long> getOfflineIdList(String appId, String userName);

    /**
     * 获取待发送的消息id
     *
     * @return
     */
    Long getMsgId4Send();

    /**
     * 获取两个用户之间的消息数量
     *
     * @param appId
     * @param to
     * @param from
     * @return
     */
    long listHistoryMsgCount(String appId, String to, String from);

    /**
     * 获取两个用户之间的消息数量
     *
     * @param appId
     * @param to
     * @param from
     * @param pageInfo
     * @param scanIndexForward
     * @return
     */
    List<String> listHistoryMsgId(String appId, String to, String from, PageInfo pageInfo, Boolean scanIndexForward);

    /**
     * 获取用户历史消息
     *
     * @param appId
     * @param user
     * @return
     */
    long listHistoryMsgCount(String appId, String user, long min, long max);

    /**
     * 获取用户历史消息
     *
     * @param appId
     * @param user
     * @param pageInfo
     * @param scanIndexForward true:正序(时间小的在前面),false:逆序(时间大的再前面)
     * @return
     */
    List<String> listHistoryMsgId(String appId, String user, PageInfo pageInfo, Boolean scanIndexForward, long min, long max);

    /**
     * 将消息添加到离线消息表
     *
     * @param message
     * @return
     */
    Message push4OffLine(Message message);

    /**
     * 处理用户登陆
     *
     * @param appId
     * @param userName
     */
    void dealLoginMsg(String appId, String userName);

    /**
     * 处理用户登出事件
     *
     * @param appId
     * @param userName
     */
    void dealLogoutMsg(String appId, String userName);
}
